<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use DB;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class CateController extends Controller
{
    /**
     * 分类的添加操作
     */
    public function getAdd()
    {
        //将分类信息读出来
        $cates = $this->getAllCates();
        //解析模板
        return view('webadmin.cate.add', [
            'cates'=>$cates
            ]);
    }

    /**
     * 分类的插入操作
     */
    public function postInsert(Request $request)
    {
        //提取参数
        $data = $request -> except(['_token']);

        //判断当前分类是否为顶级分类
        if($data['pid'] == '0') {
            //获取path字段值
            $data['path'] = '0';
        } else {
            //读取父级分类的信息
            $info = DB::table('cates')->where('id', '=', $data['pid'])->first();
            //拼接当前分类的path字符串
            $data['path'] = $info->path.','.$info->id;
        }

        //执行数据库插入
        $res = DB::table('cates')->insert($data);

        if($res) {
            return redirect('/cate/index');
        }else{
            return back();
        }
    }

   /**
    * 分类的列表显示
    */
   public function getIndex(Request $request)
   {
        //读取数据
    $cates = DB::table('cates')
        -> select(DB::raw('*, concat(path,",",id) as paths'))
        -> orderBy('paths')
        -> orderBy('id')
        -> where(function($query)use($request){
            $keyword = $request -> input('keyword');
            if(!empty($keyword)) {
                $query -> where('name','like','%'.$keyword.'%');
            }
        })
        -> paginate($request -> input('num', 10));

    //$v    存储的是一个地址
    $cates = $this -> formatCateInfo($cates);

        //模板解析
        return view('webadmin.cate.index',[
            'cates'=>$cates,
            'request'=>$request
            ]);
   }

   /**
     * ajax更新操作
     */
    public function getAupdate(Request $request)
    {
        //参数获取
        $data = $request -> only(['status']);
        //
        $res = DB::table('cates')->where('id','=', $request->input('id'))->update($data);
        //
        if($res) {
            echo 1;die;
        }else{
            echo 0;die;
        }
    }

    /**
     * 获取当前分类的所有的信息
     */
    private function getAllCates()
    {
        //读取所有的分类信息
        //将分类信息读出来
        $cates = DB::table('cates')
            ->select(DB::raw('*, concat(path,",",id) as paths'))
            ->orderBy('paths')
            ->get();

        //格式化显示的分类信息
        $cates = $this->formatCateInfo($cates);
        //返回结果
        return $cates;
    }

    /**
     * 处理数据 格式化显示分类信息
     */
    private function formatCateInfo($cates)
    {
        foreach($cates as $k=>$v) {
            //判断当前的分类的等级
            $arr = explode(',', $v->path);
            $level = count($arr) - 1;
            //修改分类中的名称  |-----
            $v->name =  str_repeat('|---->', $level) . $v->name;
        }
        return $cates;
    }

    /**
     * 分类修改操作
     */
    public function getEdit(Request $request)
    {
        //获取id
        $id = $request->input('id');
        //读取当前分类的信息
        $info = DB::table('cates') -> where('id','=',$id) -> first();
        //获取
        $cates = $this->getAllCates();
        //解析模板
        return view('webadmin.cate.edit', [
            'cates'=>$cates,
            'info'=>$info
            ]);
    }

    /**
     * 分类更新操作
     */
    public function postUpdate(Request $request)
    {
        $data = $request->except(['_token', 'id']);
        //更新
        $res = DB::table('cates')->where('id','=', $request->input('id'))->update($data);
        //判断
        if($res) {
            return redirect('/cate/index')->with('info','更新成功');
        }else {
            return back()->with('info', '更新失败');
        }
    }

    /**
     * 删除操作
     */
    public function getDelete(Request $request)
    {
        //获取id
        $id = $request->input('id');
        //读取分类信息
        $info = DB::table('cates')->where('id','=',$id)->first();
        //拼接路径开始的字符串
        $path = $info->path.','.$info->id;
        //首先先删除子分类
        DB::table('cates')->where('path','like',$path.'%')->delete();
        //删除当前的分类
        $res = DB::table('cates')->where('id','=',$id)->delete();
        if($res) {
            return back()->with('info','删除成功');
        }else{
            return back()->with('info','删除失败');
        }
    }

    /*
    [
        [
            'name'=>'男装',
            'id'=>2,
            'sub_cate'=> [
                [
                    'name'=>'西服'
                    'id'=>5,
                    'sub_cate'=>[
                        [
                            'name'=>'韩版西服',
                            'id'=>7
                        ],
                        [
                            'name'=>'英式西服',
                            'id'=>8
                        ]
                    ]
                ],
                [
                    'name'=>'裤子',
                    'id'=>6
                ],
            ]
        ]
        [
            'name'=>'女装',
            'id'=>3,
        ]
        [
            'name'=>'童装',
            'id'=>4,
        ]
    ]
    */
    public function getTest()
    {
        $res = $this->getCatesByDiGui(0);

        dd($res);
    }

    /**
     * 递归方式来获取分类信息
     */
    public function getCatesByDiGui($pid)
    {
        //获取分类
        $cates = DB::table('cates')->where('pid','=', $pid)->get();
        //遍历分类信息
        $sub_cate = [];
        foreach($cates as $k=>$v) {
            $v->sub_cate = $this->getCatesByDiGui($v->id);
            $sub_cate[] = $v;
        }
        return $sub_cate;
    }


}
